/*
 * GbtPtz.h
 *
 *  Created on: 2018年6月12日
 *      Author: zhengboyuan
 */

#ifndef GBTPTZ_H_
#define GBTPTZ_H_

#include "GbtType.h"


#ifdef __cplusplus
extern "C" {
#endif
///////////////////////////////////////////////////////////////////

/**
 * 从字符串解析出 GBT_PtzControl 结构体
 * @param control
 * @param str
 * @param size
 * @return
 */
DLLEXPORT BOOL gbtPtzParse(GBT_PtzControl* control, const char* str, size_t size);

/**
 * 将结构体 GBT_PtzControl 转换为字符串
 * @param control
 * @param str
 * @param size
 * @return
 */
DLLEXPORT size_t gbtPtzMake(const GBT_PtzControl* control, char* str, size_t size);

/**
 * 初始化
 * @param control
 */
DLLEXPORT void gbtPtzInit(GBT_PtzControl* control);

/**
 * 计算校验字节, 并设置到 GBT_PtzControl 对应的成员中.
 * @param control
 * @return 校验字节
 */
DLLEXPORT uint8_t gbtPtzCountCrc(GBT_PtzControl* control);

/**
 * 设置 PTZ.
 * 右上方向运动时, 可以调用该API 2次, 先向右,再向上(或者先向上, 再向右).
 * @param control
 * @param directive 指令, 只能是 方向, focus, iris 这几个指令
 * @param speed     速度
 */
DLLEXPORT void gbtPtzSetPtz(GBT_PtzControl* control, GBT_DeviceDirective directive, uint8_t speed);

/**
 * 设置停止指令
 * @param control
 */
DLLEXPORT void gbtPtzSetStop(GBT_PtzControl* control);

/**
 * 设置 focus, iris 停止指令
 * @param control
 */
DLLEXPORT void gbtPtzSetFiStop(GBT_PtzControl* control);

/**
 * 设置预置位
 * @param control
 * @param directive
 * @param num
 */
DLLEXPORT BOOL gbtPtzSetPreset(GBT_PtzControl* control, GBT_DeviceDirective directive, uint8_t num);

/**
 * 设置辅助开关
 * @param control
 * @param directive
 * @param num
 */
DLLEXPORT void gbtPtzSetAux(GBT_PtzControl* control, GBT_DeviceDirective directive, uint8_t num);


/**
 * 设置结构体成员
 * @param control   结构体
 * @param directive 指令
 * @param speedOrNum    速度(如果是PTZ指令)或者序号(预置位)
 * @param aux   辅助数据(分组)
 * @return
 */
DLLEXPORT BOOL gbtPtzSet(GBT_PtzControl* control, GBT_DeviceDirective directive, uint8_t speedOrNum, uint8_t aux);

/**
 * 从结构体抽取指令和对应的速度(序号).
 * @param control
 * @param directive
 * @param speedOrNum
 * @param aux
 * @return
 */
DLLEXPORT BOOL gbtPtzGet(const GBT_PtzControl* control, GBT_DeviceDirective* directive, uint8_t* speedOrNum, uint8_t* aux);

DLLEXPORT BOOL gbtIsPreset(GBT_DeviceDirective directive);

DLLEXPORT BOOL gbtIsCruise(GBT_DeviceDirective directive);



///////////////////////////////////////////////////////////////////
#ifdef __cplusplus
}
#endif



#endif /* GBTPTZ_H_ */
